home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / DBVGAL17.ARJ / SRC_ASM.ARJ / VCRTC.ASM < prev    next >
Assembly Source File  |  1992-01-25  |  2KB  |  74 lines

  1.         name    vcrtc     ; VGA CRTC register routines
  2.         ;
  3.         ;  int  CRTCread_reg(int reg);
  4.         ;  int  CRTCset_reg(int reg, int value);
  5.         ;  int  CRTCset_regm(int reg, int value, int bitmask);
  6.         ;
  7. CRTC_CTRL_PORT      EQU     03D4h
  8. CRTC_DATA_PORT      EQU     03D5h
  9.  
  10. REGNO    equ     [bp+06]
  11. VALUE    equ     [bp+08]
  12. BMASK    equ     [bp+0ah]
  13.  
  14. CRTC_TEXT       segment byte public 'CODE'
  15.         public  _CRTCread_reg
  16.         assume  cs:CRTC_TEXT
  17. _CRTCread_reg   proc    far
  18.         push    bp
  19.         mov     bp,sp
  20.  
  21.         mov     al,REGNO
  22.         mov     dx,CRTC_CTRL_PORT
  23.         out     dx,al
  24.         inc     dx
  25.         in      al,dx
  26.  
  27.         xor     ah,ah
  28.         pop     bp
  29.         ret
  30. _CRTCread_reg   endp
  31.         ;
  32.         public  _CRTCset_reg
  33. _CRTCset_reg   proc    far
  34.         push    bp
  35.         mov     bp,sp
  36.  
  37.         mov     ah,VALUE
  38. @update:
  39.         mov     al,REGNO
  40.         mov     dx,CRTC_CTRL_PORT
  41.         out     dx,ax
  42.  
  43.         xor     ax,ax
  44.         pop     bp
  45.         ret
  46. _CRTCset_reg   endp
  47.         ;
  48.         public  _CRTCset_regm
  49. _CRTCset_regm     PROC  far
  50.         push    bp
  51.         mov     bp,sp
  52.  
  53.         mov     al,REGNO                ; read old value
  54.         mov     dx,CRTC_CTRL_PORT
  55.         out     dx,al
  56.         inc     dx
  57.         in      al,dx
  58.  
  59.         mov     bl,BMASK                ; create new value
  60.         not     bl        ; !mask
  61.         and     al,bl     ; al=(!mask®(reg_num));
  62.         mov     cl,al     ; save for a microsecond
  63.         mov     ah,VALUE
  64.         mov     bl,BMASK
  65.         and     ah,bl
  66.         or      ah,cl           ; leave value in ah for _CRTCset_reg
  67.  
  68.         jmp     @update         ; jump into _CRTCset_reg
  69.  
  70. _CRTCset_regm     ENDP
  71. CRTC_TEXT       ends
  72.         end
  73.  
  74.